热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

实战|canal实现Mysql到Elasticsearch实时增量同步

实战|canal实现Mysql到Elasticsearch实时增量同步:题记关系型数据库MysqlOracle增量同步Elasticsearch是持续关注的问题,也是社区、QQ群等
题记

关系型数据库Mysql/Oracle增量同步Elasticsearch是持续关注的问题,也是社区、QQ群等讨论最多的问题之一。 问题包含但不限于: 1、Mysql如何同步到Elasticsearch? 2、Logstash、kafka_connector、canal选型有什么不同,如何取舍? 3、能实现同步增删改查吗? ..... 本文给出答案。

1、Canal同步

1.1 canal官方已支持Mysql同步ES6.X

同步原理,参见之前: 干货 | Debezium实现Mysql到Elasticsearch高效实时同步。

canal 1.1.1版本之后, 增加客户端数据落地的适配及启动功能。canal adapter 的 Elastic Search 版本支持6.x.x以上。 需要借助adapter实现。

1.2 同步效果

1)已验证:仅支持增量同步,不支持全量已有数据同步。这点,canal的初衷订位就是“阿里巴巴mysql数据库binlog的增量订阅&消费组件”。

2)已验证:由于采用了binlog机制,Mysql中的新增、更新、删除操作,对应的Elasticsearch都能实时新增、更新、删除。

3)推荐使用场景 canal适用于对于Mysql和Elasticsearch数据实时增、删、改要求高的业务场景。 实时场景要求不高的业务场景,logstashinputjdbc也能满足。

建议,做好选型甄别。

2、同步版本:

  • ES:6.6.1
  • Mysql: 5.7.25
  • canal:v1.1.3-alpha-2
  • canal-adapter:v1.1.3-alpha-2
  • canal下载地址:https://github.com/alibaba/canal/releases

3、同步步骤解读

3.1 启动canal,可作为常驻进程后台运行。

官网已有详细描述https://github.com/alibaba/canal/wiki/QuickStart, 以下仅列举关键注意事项。

对应下载文件:canal.deployer-1.1.3-SNAPSHOT.tar.gz, 可以实时关注最新版本。

3.1.1 启用binlog

canal的原理是基于mysql binlog技术,所以这里一定需要开启mysql的binlog写入功能,建议配置binlog模式为row.

[mysqld] log-bin=mysql-bin #添加这一行就ok binlog-format=ROW #选择row模式 server_id=1 #配置mysql replaction需要定义,不能和canal的slaveId重复

3.1.2 修改配置文件

vi conf/example/instance.properties

配置数据库基本信息。

3.1.3 启动canal

bin/startup.sh可通过日志排查错误。

3.2 配置ElasticSearch适配器,并实现同步。

官网已有详细描述:https://github.com/alibaba/canal/wiki/Sync-ES。 以下仅针对部署遇到的坑做描述。

3.2.1 部署版本

anal.adapter-1.1.3-SNAPSHOT.tar.gz,如有更新,建议使用最新版本。

3.2.2 核心配置

[root@localhost es]# cat mytest_user.yml dataSourceKey: defaultDS destination: example esMapping: _index: baidu_index _type: _doc _id: _id pk: id sql: "select a.id as _id, a.title, a.url, a.publish_time, a.content, from baidu_info as a" # objFields: # _labels: array:; etlCondition: "where a.id >= 1" commitBatch: 3000

实现目的:库表id字段作为Elasticsearch的_id,以期实现自增。

4、多表关联实现

建议参考官网:https://github.com/alibaba/canal/wiki/Sync-ES 支持:

  • 一对一
  • 一对多
  • 多对多

5、坑

坑1:canal.adapter-1.1.2 启动失败

启动失败:https://github.com/alibaba/canal/issues/1513 该问题在1.1.3版本已经修复。

坑2:不支持全量同步

全量同步建议使用logstash或者其他工具:

坑3:必须先在ES创建好对应索引的Mapping

否则,会没有识别索引,会报写入错误。

坑4:多张表的同步如何实现?

在canal.adapter-1.1.3/conf/es的新增*.yml配置即可。 也就是说,可以一张Mysql表一个配置文件。

坑5:空指针异常错误

解决方案:sql语句部分,指定对应库表id为ES中的_id,否则会报错。 举例:

select sx_sid as _id, name from baidu_info

坑6:基于 row 模式的 binlog 会不会记录变更前、变更后的值呢?

  • INSERT:只有变更后的值。
  • UPDATE:包含了变更前、变更后的值。
  • DELETE:变更前的值
    关于全量同步:https://github.com/alibaba/canal/issues/376

6 同步选型小结

技术图片

以上不同选型各有利弊,建议 结合实际业务斟酌选择。 欢迎留下你的同步实践方案和思考。

技术图片

加入星球,和大佬一起沉淀技术!

实战 | canal 实现Mysql到Elasticsearch实时增量同步


推荐阅读
  • 本文讨论了在数据库打开和关闭状态下,重新命名或移动数据文件和日志文件的情况。针对性能和维护原因,需要将数据库文件移动到不同的磁盘上或重新分配到新的磁盘上的情况,以及在操作系统级别移动或重命名数据文件但未在数据库层进行重命名导致报错的情况。通过三个方面进行讨论。 ... [详细]
  • mysql-cluster集群sql节点高可用keepalived的故障处理过程
    本文描述了mysql-cluster集群sql节点高可用keepalived的故障处理过程,包括故障发生时间、故障描述、故障分析等内容。根据keepalived的日志分析,发现bogus VRRP packet received on eth0 !!!等错误信息,进而导致vip地址失效,使得mysql-cluster的api无法访问。针对这个问题,本文提供了相应的解决方案。 ... [详细]
  • 1.ELK系统是什么ELK是一套日志中心解决方案,其三个字母分别表示:Elasticsearch:负责日志存储及检索Logstash&#x ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • Metasploit攻击渗透实践
    本文介绍了Metasploit攻击渗透实践的内容和要求,包括主动攻击、针对浏览器和客户端的攻击,以及成功应用辅助模块的实践过程。其中涉及使用Hydra在不知道密码的情况下攻击metsploit2靶机获取密码,以及攻击浏览器中的tomcat服务的具体步骤。同时还讲解了爆破密码的方法和设置攻击目标主机的相关参数。 ... [详细]
  • 本文介绍了高校天文共享平台的开发过程中的思考和规划。该平台旨在为高校学生提供天象预报、科普知识、观测活动、图片分享等功能。文章分析了项目的技术栈选择、网站前端布局、业务流程、数据库结构等方面,并总结了项目存在的问题,如前后端未分离、代码混乱等。作者表示希望通过记录和规划,能够理清思路,进一步完善该平台。 ... [详细]
  • Oracle seg,V$TEMPSEG_USAGE与Oracle排序的关系及使用方法
    本文介绍了Oracle seg,V$TEMPSEG_USAGE与Oracle排序之间的关系,V$TEMPSEG_USAGE是V_$SORT_USAGE的同义词,通过查询dba_objects和dba_synonyms视图可以了解到它们的详细信息。同时,还探讨了V$TEMPSEG_USAGE的使用方法。 ... [详细]
  • PDO MySQL
    PDOMySQL如果文章有成千上万篇,该怎样保存?数据保存有多种方式,比如单机文件、单机数据库(SQLite)、网络数据库(MySQL、MariaDB)等等。根据项目来选择,做We ... [详细]
  • 在Oracle11g以前版本中的的DataGuard物理备用数据库,可以以只读的方式打开数据库,但此时MediaRecovery利用日志进行数据同步的过 ... [详细]
  • Activiti7流程定义开发笔记
    本文介绍了Activiti7流程定义的开发笔记,包括流程定义的概念、使用activiti-explorer和activiti-eclipse-designer进行建模的方式,以及生成流程图的方法。还介绍了流程定义部署的概念和步骤,包括将bpmn和png文件添加部署到activiti数据库中的方法,以及使用ZIP包进行部署的方式。同时还提到了activiti.cfg.xml文件的作用。 ... [详细]
  • 本文整理了315道Python基础题目及答案,帮助读者检验学习成果。文章介绍了学习Python的途径、Python与其他编程语言的对比、解释型和编译型编程语言的简述、Python解释器的种类和特点、位和字节的关系、以及至少5个PEP8规范。对于想要检验自己学习成果的读者,这些题目将是一个不错的选择。请注意,答案在视频中,本文不提供答案。 ... [详细]
  • 用elastic stack来分析下你的redis slowlog
    redis是目前最流行的NoSQL内存数据库,然而如果在使用过程中出现滥用、乱用的情况,很容易发生性能问题,此时我们就要去关注慢查询日志& ... [详细]
  • Rancher 部署 logstash
    RancherOnlogstash一、下载logstash镜像二、创建挂载目录与映射配置文件2.1创建配置文件2.2配置启动命令2.3映射配置文件概述:logstas ... [详细]
  • db2怎么限定查询条数_ES的跨索引查询有多便利?对比下分库分表、分片更直观...
    作者介绍李猛(ynuosoft),Elastic-stack产品深度用户,ES认证工程师,2012年接触Elasticsearch ... [详细]
  • ElasticStack综合案例
    本篇将我们前面学习到的技术:ElasticSearch、Beats、Kibana、Logstash整合起来,做一个综合性的学习,目的是为了让小伙伴们能够更加深刻的理解Elastic ... [详细]
author-avatar
树阿两
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有